<template>
  <div id="promise"></div>
</template>
<script>
import MyPromise from "./../../utils/promise";
export default {
  name: "promise",
  data() {
    return {};
  },
  methods: {},
  components: {},
  mounted() {
    //我们先回顾一下我们平时是怎么用的
    // let res = new Promise((resolve) => {
    //   setTimeout(() => {
    //     resolve("成功了");
    //   }, 1000);
    // });
    // res.then((data) => {
    //   // 过一秒后打印出 => 成功了
    //   console.log("data:", data);
    // });

    // 我们传入promise构造函数的execute是一个立即执行函数
    // 我们可以试一下：

    // 再来回顾一下，我们调用了execute中的resolve或者reject的时候，对应的then返回中的参数函数才会执行，说明
    // 在执行了resolve和reject之后，响应的then方法中的函数才会去执行
    let x = new MyPromise((res, rej) => {
      console.log("立即执行"); // 会立即打印出结果
      res("成功了");
      rej("失败了");
    });
    x.then(
      (data) => {
        console.log("data:123", data);
      },
      (err) => {
        console.log("err:", err);
      }
    );
  },
  /**
   * 从这儿我们能够看出来
   * 1、Promise是通过构造函数实例化一个对象，然后通过实例对象上的then方法，来处理异步返回的结果，并且他接受一个函数(该函数接受两个方法作为参数=>resolve,reject)作为参数，
   * 2、promise内部会保存失败和成功的结果，即resolve和reject的结果
   * 3、promise对象内部有一个resolve方法和一个resolve方法
   * 4、promise的对象上面有一个then方法
   */

  /**
   * Promise A+ 规范也说
   * 1、每一个promise对象初始化的时候，他的状态一定是pending
   * 2、一个promise对象对应着三种状态 pending, fulfilled, rejected
   * 3、promise对象的状态如果是成功或者失败的状态，就不能在变为其它的状态，如果状态为pending，可以继续改变状态为成功或者失败
   */
};
</script>
<style scoped lang="scss"></style>
